package jdkrel._hook;

/**
 * @Author: huangya
 * @Date: 2020/4/25
 * @Description: JDK提供了Java.Runtime.addShutdownHook(Thread hook)方法，可以注册一个JVM关闭的钩子，这个钩子可以在一下几种场景中被调用：
 * 1、程序正常退出
 * 2、使用System.exit()
 * 3、终端使用Ctrl+C触发的中断
 * 4、系统关闭
 * 5、OutOfMemory宕机
 * 6、使用Kill pid命令干掉进程（注：在使用kill -9 pid时，是不会被调用的）
 */
public class ShutdownHookTest {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // 定义线程1
        Thread thread1 = new Thread() {
            public void run() {
                System.out.println("thread1...");
            }
        };

        // 定义线程2
        Thread thread2 = new Thread() {
            public void run() {
                System.out.println("thread2...");
            }
        };
        // 定义关闭线程
        Thread shutdownThread = new Thread() {
            public void run() {
                System.out.println("shutdownThread...");
            }
        };
        // jvm关闭的时候先执行该线程钩子
        Runtime.getRuntime().addShutdownHook(shutdownThread);
        thread1.start();
        thread2.start();

//        System.out.println(Runtime.getRuntime().maxMemory());

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
